<?php
namespace app\common\service\translate\engine;

use Volc\Base\V4Curl;

/**
 * 火山翻译官方DEMO
 */
class HsTranslateInstance extends V4Curl
{
    protected $error = null;

    protected $apiList = [
        "LangDetect" => [
            "url" => "/",
            "method" => "post",
            "config" => [
                "query" => [
                    "Action" => "LangDetect",
                    "Version" => "2020-06-01",
                ],
            ],
        ],
        "TranslateText" => [
            "url" => "/",
            "method" => "post",
            "config" => [
                "query" => [
                    "Action" => "TranslateText",
                    "Version" => "2020-06-01",
                ],
            ],
        ],
    ];

    /**
     * @notes 设置翻译源文本
     * @param $text
     * @return $this
     */
    protected function getConfig(string $region)
    {
        return [
            "host" => "https://translate.volcengineapi.com",
            "config" => [
                "timeout" => 5.0,
                "headers" => [
                    "Accept" => "application/json"
                ],
                "v4_credentials" => [
                    "region" => "cn-north-1",
                    "service" => "translate",
                ],
            ],
        ];
    }

    /**
     * @notes 错误信息
     * @return string|null
     */
    public function getError()
    {
        return $this->error;
    }

    /**
     * 获取翻译
     * @param string $sourceLanguage
     * @param string $targetLanguage
     * @param array $textList
     * @return array
     * @throws \Throwable
     */
    public function translateText(string $sourceLanguage, string $targetLanguage, array $textList)
    {
        try {
            $resp = $this->request('TranslateText', [
                'json' => [
                    'SourceLanguage' => $sourceLanguage,
                    'TargetLanguage' => $targetLanguage,
                    'TextList' => $textList
                ]
            ]);
        } catch (\Throwable $e) {
            throw $e;
        }
        if ($resp->getStatusCode() != 200) {
            $this->error = "failed to translate: status_code=" . $resp->getStatusCode() . ", resp=" . $resp->getBody();
            return false;
        }
        $resArray = json_decode($resp->getBody()->getContents(), true);
        if (is_null($resArray["TranslationList"])) {
            $this->error = "failed to Error: code=" . $resArray['ResponseMetadata']['Error']['Code'] . ", Message=" . $resArray['ResponseMetadata']['Error']['Message'];
            return false;
        }
        return $resArray["TranslationList"];
    }
}

/**
 * 火山翻译
 * Class HsTranslate
 * @package app\common\service\translate\engine
 */
class HsTranslate
{
    protected $instance = null;
    protected $error = null;
    protected $sourceTextList = '';
    protected $sourceLanguage;
    protected $targetLanguage;

    public function __construct($config)
    {
        if (empty($config)) {
            $this->error = '请联系管理员配置参数';
            return false;
        }

        //TODO:保留火山翻译官方demo调用方式
        $this->instance = HsTranslateInstance::getInstance();
        $this->instance->setAccessKey($config['access_key']);
        $this->instance->setSecretKey($config['secret_key']);
    }

    /**
     * @notes 设置翻译源文本
     * @param $text
     * @return $this
     */
    public function setSourceTextList($text)
    {
        if (is_array($text)) {
            $this->sourceTextList = $text;
        } else {
            $this->sourceTextList = [$text];
        }
        return $this;
    }

    /**
     * @notes 设置翻译源语言
     * @param $langCode
     * @return $this
     */
    public function setSourceLanguage(string $langCode)
    {
        $this->sourceLanguage = $langCode;
        return $this;
    }

    /**
     * 转换火山语言代码
     * @param $code
     * @return mixed
     */
    private function getHSLangCode()
    {
        $codeList = [
            'sq' => 'sq', //阿尔巴尼亚语
            'sq-AL' => 'sq', //阿尔巴尼亚语(阿尔巴尼亚)
//            'gsw' => '00000000000', //阿尔萨斯语
//            'gsw-FR' => '00000000000', //阿尔萨斯语(法国)
            'ar' => 'ar', //阿拉伯语
            'ar-DZ' => 'ar', //阿拉伯语(阿尔及利亚)
            'ar-AE' => 'ar', //阿拉伯语(阿联酋)
            'ar-OM' => 'ar', //阿拉伯语(阿曼)
            'ar-EG' => 'ar', //阿拉伯语(埃及)
            'ar-BH' => 'ar', //阿拉伯语(巴林)
            'ar-QA' => 'ar', //阿拉伯语(卡塔尔)
            'ar-KW' => 'ar', //阿拉伯语(科威特)
            'ar-LB' => 'ar', //阿拉伯语(黎巴嫩)
            'ar-LY' => 'ar', //阿拉伯语(利比亚)
            'ar-MA' => 'ar', //阿拉伯语(摩洛哥)
            'ar-SA' => 'ar', //阿拉伯语(沙特阿拉伯)
            'ar-TN' => 'ar', //阿拉伯语(突尼斯)
            'ar-SY' => 'ar', //阿拉伯语(叙利亚)
            'ar-YE' => 'ar', //阿拉伯语(也门)
            'ar-IQ' => 'ar', //阿拉伯语(伊拉克)
            'ar-JO' => 'ar', //阿拉伯语(约旦)
            'am' => 'am', //阿姆哈拉语
            'am-ET' => 'am', //阿姆哈拉语(埃塞俄比亚)
//            'as' => '00000000000', //阿萨姆语
//            'as-IN' => '00000000000', //阿萨姆语(印度)
            'az' => 'az', //阿塞拜疆语
            'az-Latn' => 'az', //阿塞拜疆语(拉丁语)
            'az-Latn-AZ' => 'az', //阿塞拜疆语(拉丁语，阿塞拜疆)
            'az-Cyrl' => 'az', //阿塞拜疆语(西里尔文)
            'az-Cyrl-AZ' => 'az', //阿塞拜疆语(西里尔文，阿塞拜疆)
            'kn' => 'kn', //埃纳德语
            'kn-IN' => 'kn', //埃纳德语(印度)
//            'ga' => '00000000000', //爱尔兰语
//            'ga-IE' => '00000000000', //爱尔兰语(爱尔兰)
            'et' => 'et', //爱沙尼亚语
            'et-EE' => 'et', //爱沙尼亚语(爱沙尼亚)
//            'oc' => '00000000000', //奥克西唐语
//            'oc-FR' => '00000000000', //奥克西唐语(法国)
//            'or' => '00000000000', //奥里雅语
//            'or-IN' => '00000000000', //奥里雅语(印度)
            'ba' => 'ba', //巴什基尔语
            'ba-RU' => 'ba', //巴什基尔语(俄罗斯)
//            'eu' => '00000000000', //巴斯克语
//            'eu-ES' => '00000000000', //巴斯克语(巴斯克)
            'nso' => 'nso', //巴索托语
            'nso-ZA' => 'nso', //巴索托语(南非)
//            'be' => '00000000000', //白俄罗斯语
//            'be-BY' => '00000000000', //白俄罗斯语(白俄罗斯)
            'bg' => 'bg', //保加利亚语
            'bg-BG' => 'bg', //保加利亚语(保加利亚)
//            'se' => '00000000000', //北萨米语
//            'se-FI' => '00000000000', //北萨米语(芬兰)
//            'se-NO' => '00000000000', //北萨米语(挪威)
//            'se-SE' => '00000000000', //北萨米语(瑞典)
//            'is' => '00000000000', //冰岛语
//            'is-IS' => '00000000000', //冰岛语(冰岛)
            'pl' => 'pl', //波兰语
            'pl-PL' => 'pl', //波兰语(波兰)
            'bs' => 'bs', //波斯尼亚语
            'bs-Latn' => 'bs', //波斯尼亚语(拉丁语)
            'bs-L' => 'bs', //波斯尼亚语(拉丁语，波斯尼亚和黑塞哥维那)
            'bs-Cyrl' => 'bs', //波斯尼亚语(西里尔文)
//            'bs' => '00000000000', //波斯尼亚语(西里尔文，波斯尼亚和黑塞哥维那)
            'fa' => 'fa', //波斯语
            'fa-IR' => 'fa', //波斯语
//            'br' => '00000000000', //布里多尼语
//            'br-FR' => '00000000000', //布里多尼语(法国)
            'bo' => 'bo', //藏语
            'bo-CN' => 'bo', //藏语(中国)
            'ko' => 'ko', //朝鲜语
            'ko-KR' => 'ko', //朝鲜语(韩国)
            'tn' => 'tn', //茨瓦纳语
            'tn-ZA' => 'tn', //茨瓦纳语(南非)
//            'prs' => '00000000000', //达里语
//            'prs-AF' => '00000000000', //达里语(阿富汗)
            'tt' => 'tt', //鞑靼语
            'tt-RU' => 'tt', //鞑靼语(俄罗斯)
            'da' => 'da', //丹麦语
            'da-DK' => 'da', //丹麦语(丹麦)
            'de' => 'de', //德语
            'de-AT' => 'de', //德语(奥地利)
            'de-DE' => 'de', //德语(德国)
            'de-LI' => 'de', //德语(列支敦士登)
            'de-LU' => 'de', //德语(卢森堡)
            'de-CH' => 'de', //德语(瑞士)
//            'dv' => '00000000000', //迪维希语
//            'dv-MV' => '00000000000', //迪维希语(马尔代夫)
            'ru' => 'ru', //俄语
            'ru-RU' => 'ru', //俄语(俄罗斯)
//            'fo' => '00000000000', //法罗语
//            'fo-FO' => '00000000000', //法罗语(法罗群岛)
            'fr' => 'fr', //法语
            'fr-BE' => 'fr', //法语(比利时)
            'fr-FR' => 'fr', //法语(法国)
            'fr-CA' => 'fr', //法语(加拿大)
            'fr-LU' => 'fr', //法语(卢森堡)
            'fr-MC' => 'fr', //法语(摩纳哥)
            'fr-CH' => 'fr', //法语(瑞士)
//            'sa' => '00000000000', //梵语
//            'sa-IN' => '00000000000', //梵语(印度)
//            'fil' => '00000000000', //菲律宾语
//            'fil-PH' => '00000000000', //菲律宾语(菲律宾)
            'fi' => 'fi', //芬兰语
            'fi-FI' => 'fi', //芬兰语(芬兰)
//            'fy' => '00000000000', //弗里西亚语
//            'fy-NL' => '00000000000', //弗里西亚语(荷兰)
            'km' => 'km', //高棉语
            'km-KH' => 'km', //高棉语(柬埔寨)
            'kl' => 'kl', //格陵兰语
            'kl-GL' => 'kl', //格陵兰语(格陵兰)
            'ka' => 'ka', //格鲁吉亚语
            'ka-GE' => 'ka', //格鲁吉亚语(格鲁吉亚)
            'gu' => 'gu', //古吉拉特语
            'gu-IN' => 'gu', //古吉拉特语(印度)
//            'kk' => '00000000000', //哈萨克语
//            'kk-KZ' => '00000000000', //哈萨克语(哈萨克斯坦)
            'ha' => 'ha', //豪撒语
            'ha-Latn' => 'ha', //豪撒语(拉丁语)
            'ha-Latn-NG' => 'ha', //豪撒语(拉丁语，尼日利亚)
            'nl' => 'nl', //荷兰语
            'nl-BE' => 'nl', //荷兰语(比利时)
            'nl-NL' => 'nl', //荷兰语(荷兰)
//            'qut' => '00000000000', //基切语
//            'qut-GT' => '00000000000', //基切语(危地马拉)
//            'ky' => '00000000000', //吉尔吉斯语
//            'ky-KG' => '00000000000', //吉尔吉斯语(吉尔吉斯斯坦)
            'gl' => 'gl', //加利西亚语
            'gl-ES' => 'gl', //加利西亚语(加利西亚语)
            'ca' => 'ca', //加泰罗尼亚语
            'ca-ES' => 'ca', //加泰罗尼亚语(加泰罗尼亚)
            'cs' => 'cs', //捷克语
            'cs-CZ' => 'cs', //捷克语(捷克共和国)
//            'co' => '00000000000', //科西嘉语
//            'co-FR' => '00000000000', //科西嘉语(法国)
            'hr' => 'hr', //克罗地亚语
            'hr-HR' => 'hr', //克罗地亚语(克罗地亚)
            'hr-B' => 'hr', //克罗地亚语(拉丁语，波斯尼亚和黑塞哥维那)
//            'quz' => '00000000000', //克丘亚语
//            'quz-BO' => '00000000000', //克丘亚语(玻利维亚)
//            'quz-EC' => '00000000000', //克丘亚语(厄瓜多尔)
//            'quz-PE' => '00000000000', //克丘亚语(秘鲁)
//            'kok' => '00000000000', //孔卡尼语
//            'kok-IN' => '00000000000', //孔卡尼语(印度)
            'lv' => 'lv', //拉脱维亚语
            'lv-LV' => 'lv', //拉脱维亚语(拉脱维亚)
            'lo' => 'lo', //老挝语
            'lo-LA' => 'lo', //老挝语(老挝人民民主共和国)
            'lt' => 'lt', //立陶宛语
            'lt-LT' => 'lt', //立陶宛语(立陶宛)
//            'lb' => '00000000000', //卢森堡语
//            'lb-LU' => '00000000000', //卢森堡语(卢森堡)
            'rw' => 'rw', //卢旺达语
            'rw-RW' => 'rw', //卢旺达语(卢旺达)
            'ro' => 'ro', //罗马尼亚语
            'ro-RO' => 'ro', //罗马尼亚语(罗马尼亚)
//            'rm' => '00000000000', //罗曼什语
//            'rm-CH' => '00000000000', //罗曼什语(瑞士)
//            'smj' => '00000000000', //律勒萨米语
//            'smj-NO' => '00000000000', //律勒萨米语(挪威)
//            'smj-SE' => '00000000000', //律勒萨米语(瑞典)
//            'mt' => '00000000000', //马耳他语
//            'mt-MT' => '00000000000', //马耳他语(马耳他)
            'mr' => 'mr', //马拉地语
            'mr-IN' => 'mr', //马拉地语(印度)
            'ml' => 'ml', //马拉雅拉姆语
            'ml-IN' => 'ml', //马拉雅拉姆语(印度)
            'ms' => 'ms', //马来语
            'ms-MY' => 'ms', //马来语(马来西亚)
            'ms-BN' => 'ms', //马来语(文莱达鲁萨兰国)
//            'arn' => '00000000000', //马普丹冈语
//            'arn-CL' => '00000000000', //马普丹冈语(智利)
            'mk' => 'mk', //马其顿语(前南斯拉夫马其顿共和国)
            'mk-MK' => 'mk', //马其顿语(前南斯拉夫马其顿共和国)
//            'mi' => '00000000000', //毛利语
//            'mi-NZ' => '00000000000', //毛利语(新西兰)
            'mn' => 'mn', //蒙古语
            'mn-Mong' => 'mn', //蒙古语(传统蒙古语)
            'mn-Mong-CN' => 'mn', //蒙古语(传统蒙古语，中国)
            'mn-Cyrl' => 'mn', //蒙古语(西里尔文)
            'mn-MN' => 'mn', //蒙古语(西里尔文，蒙古)
            'bn' => 'bn', //孟加拉语
            'bn-BD' => 'bn', //孟加拉语(孟加拉国)
            'bn-IN' => 'bn', //孟加拉语(印度)
//            'moh' => '00000000000', //莫霍克语
//            'moh-CA' => '00000000000', //莫霍克语(莫霍克)
            'af' => 'af', //南非荷兰语
            'af-ZA' => 'af', //南非荷兰语(南非)
//            'sma' => '00000000000', //南萨米语
//            'sma-NO' => '00000000000', //南萨米语(挪威)
//            'sma-SE' => '00000000000', //南萨米语(瑞典)
//            'ne' => '00000000000', //尼泊尔语
//            'ne-NP' => '00000000000', //尼泊尔语(尼泊尔)
//            'nn-NO' => '00000000000', //尼诺斯克挪威语(挪威)
            'no' => 'no', //挪威语
            'nn' => 'no', //挪威语(尼诺斯克语)
            'pa' => 'pa', //旁遮普语
            'pa-IN' => 'pa', //旁遮普语(印度)
            'pt' => 'pt', //葡萄牙语
            'pt-BR' => 'pt', //葡萄牙语(巴西)
            'pt-PT' => 'pt', //葡萄牙语(葡萄牙)
//            'ps' => '00000000000', //普什图语
//            'ps-AF' => '00000000000', //普什图语(阿富汗)
            'ja' => 'ja', //日语
            'ja-JP' => 'ja', //日语(日本)
            'sv' => 'sv', //瑞典语
            'sv-FI' => 'sv', //瑞典语(芬兰)
            'sv-SE' => 'sv', //瑞典语(瑞典)
            'sr' => 'sr', //塞尔维亚语
            'sr-Latn' => 'sr', //塞尔维亚语(拉丁语)
            'sr-L' => 'sr', //塞尔维亚语(拉丁语，波斯尼亚和黑塞哥维那)
            'sr-Latn-ME' => 'sr', //塞尔维亚语(拉丁语，黑山共和国)
            'sr-Latn-RS' => 'sr', //塞尔维亚语(拉丁语，塞尔维亚共和国)
            'sr-Lat' => 'sr', //塞尔维亚语(拉丁语，塞尔维亚和黑山(前))
            'sr-Cyrl' => 'sr', //塞尔维亚语(西里尔文)
//            'sr' => '00000000000', //塞尔维亚语(西里尔文，波斯尼亚和黑塞哥维那)
            'sr-Cyrl-ME' => 'sr', //塞尔维亚语(西里尔文，黑山共和国)
            'sr-Cyrl-' => 'sr', //塞尔维亚语(西里尔文，塞尔维亚共和国)
            'sr-C' => 'sr', //塞尔维亚语(西里尔文，塞尔维亚和黑山(前))
//            'si' => '00000000000', //僧伽罗语
//            'si-LK' => '00000000000', //僧伽罗语(斯里兰卡)
//            'hsb' => '00000000000', //上索布语
//            'hsb-DE' => '00000000000', //上索布语(德国)
            'nb' => 'nb', //书面挪威语
            'nb-NO' => 'nb', //书面挪威语(挪威)
//            'sms' => '00000000000', //斯科特萨米语
//            'sms-FI' => '00000000000', //斯科特萨米语(芬兰)
            'sk' => 'sk', //斯洛伐克语
            'sk-SK' => 'sk', //斯洛伐克语(斯洛伐克)
            'sl' => 'sl', //斯洛文尼亚语
            'sl-SI' => 'sl', //斯洛文尼亚语(斯洛文尼亚)
//            'sw' => '00000000000', //斯瓦希里语
//            'sw-KE' => '00000000000', //斯瓦希里语(肯尼亚)
//            'gd' => '00000000000', //苏格兰盖立语
//            'gd-GB' => '00000000000', //苏格兰盖立语(英国)
            'xh' => 'xh', //索萨语
            'xh-ZA' => 'xh', //索萨语(南非)
//            'tg' => '00000000000', //塔吉克语
//            'tg-Cyrl' => '00000000000', //塔吉克语(西里尔文)
//            'tg-Cyrl-TJ' => '00000000000', //塔吉克语(西里尔文，塔吉克斯坦)
//            'tzm' => '00000000000', //塔马塞特语
//            'tzm-Latn' => '00000000000', //塔马塞特语(拉丁语)
//            'tzm-Latn-DZ' => '00000000000', //塔马塞特语(拉丁语，阿尔及利亚)
            'th' => 'th', //泰国语
            'te' => 'te', //泰卢固语
            'te-IN' => 'te', //泰卢固语(印度)
            'ta' => 'ta', //泰米尔语
            'ta-IN' => 'ta', //泰米尔语(印度)
            'th-TH' => 'ta', //泰语(泰国)
            'tr' => 'tr', //土耳其语
            'tr-TR' => 'tr', //土耳其语(土耳其)
            'tk' => 'tk', //土库曼语
            'tk-TM' => 'tk', //土库曼语(土库曼斯坦)
            'cy' => 'cy', //威尔士语
            'cy-GB' => 'cy', //威尔士语(英国)
            'ug' => 'ug', //维吾尔语
            'ug-CN' => 'ug', //维吾尔语(中国)
            'wo' => 'wo', //沃洛夫语
            'wo-SN' => 'wo', //沃洛夫语(塞内加尔)
            'ur' => 'ur', //乌尔都语
            'ur-PK' => 'ur', //乌尔都语(巴基斯坦伊斯兰共和国)
            'uk' => 'uk', //乌克兰语
            'uk-UA' => 'uk', //乌克兰语(乌克兰)
//            'uz' => '00000000000', //乌兹别克语
//            'uz-Latn' => '00000000000', //乌兹别克语(拉丁语)
//            'uz-Latn-UZ' => '00000000000', //乌兹别克语(拉丁语，乌兹别克斯坦)
//            'uz-Cyrl' => '00000000000', //乌兹别克语(西里尔文)
//            'uz-Cyrl-UZ' => '00000000000', //乌兹别克语(西里尔文，乌兹别克斯坦)
            'es' => 'es', //西班牙语
            'es-AR' => 'es', //西班牙语(阿根廷)
            'es-PY' => 'es', //西班牙语(巴拉圭)
            'es-PA' => 'es', //西班牙语(巴拿马)
            'es-PR' => 'es', //西班牙语(波多黎各)
            'es-BO' => 'es', //西班牙语(玻利维亚)
            'es-DO' => 'es', //西班牙语(多米尼加共和国)
            'es-EC' => 'es', //西班牙语(厄瓜多尔)
            'es-CO' => 'es', //西班牙语(哥伦比亚)
            'es-CR' => 'es', //西班牙语(哥斯达黎加)
            'es-HN' => 'es', //西班牙语(洪都拉斯)
            'es-US' => 'es', //西班牙语(美国)
            'es-PE' => 'es', //西班牙语(秘鲁)
            'es-MX' => 'es', //西班牙语(墨西哥)
            'es-NI' => 'es', //西班牙语(尼加拉瓜)
            'es-SV' => 'es', //西班牙语(萨尔瓦多)
            'es-GT' => 'es', //西班牙语(危地马拉)
            'es-VE' => 'es', //西班牙语(委内瑞拉玻利瓦尔共和国)
            'es-UY' => 'es', //西班牙语(乌拉圭)
            'es-ES' => 'es', //西班牙语(西班牙，国际排序)
            'es-CL' => 'es', //西班牙语(智利)
            'he' => 'he', //希伯来语
            'he-IL' => 'he', //希伯来语(以色列)
            'el' => 'el', //希腊语
            'el-GR' => 'el', //希腊语(希腊)
//            'dsb' => '00000000000', //下索布语
//            'dsb-DE' => '00000000000', //下索布语(德国)
            'hu' => 'hu', //匈牙利语
            'hu-HU' => 'hu', //匈牙利语(匈牙利)
//            'syr' => '00000000000', //叙利亚语
//            'syr-SY' => '00000000000', //叙利亚语(叙利亚)
//            'sah' => '00000000000', //雅库特语
//            'sah-RU' => '00000000000', //雅库特语(俄罗斯)
            'hy' => 'hy', //亚美尼亚语
            'hy-AM' => 'hy', //亚美尼亚语(亚美尼亚)
            'ig' => 'ig', //伊博语
            'ig-NG' => 'ig', //伊博语(尼日利亚)
//            'smn' => '00000000000', //伊纳里萨米语
//            'smn-FI' => '00000000000', //伊纳里萨米语(芬兰)
//            'ii' => '00000000000', //彝语
//            'ii-CN' => '00000000000', //彝语(中国)
            'it' => 'it', //意大利语
            'it-CH' => 'it', //意大利语(瑞士)
            'it-IT' => 'it', //意大利语(意大利)
            'iu' => 'iu', //因纽特语
            'iu-Latn' => 'iu', //因纽特语(拉丁语)
            'iu-Latn-CA' => 'iu', //因纽特语(拉丁语，加拿大)
            'iu-Cans' => 'iu', //因纽特语(音节)
            'iu-Cans-CA' => 'iu', //因纽特语(音节，加拿大)
            'hi' => 'hi', //印地语
            'hi-IN' => 'hi', //印地语(印度)
            'id' => 'id', //印度尼西亚语
            'id-ID' => 'id', //印度尼西亚语(印度尼西亚)
            'en' => 'en', //英语
            'en-IE' => 'en', //英语(爱尔兰)
            'en-AU' => 'en', //英语(澳大利亚)
            'en-BZ' => 'en', //英语(伯利兹)
            'en-PH' => 'en', //英语(菲律宾共和国)
            'en-029' => 'en', //英语(加勒比海)
            'en-CA' => 'en', //英语(加拿大)
            'en-ZW' => 'en', //英语(津巴布韦)
            'en-MY' => 'en', //英语(马来西亚)
            'en-US' => 'en', //英语(美国)
            'en-ZA' => 'en', //英语(南非)
            'en-TT' => 'en', //英语(特立尼达和多巴哥)
            'en-SG' => 'en', //英语(新加坡)
            'en-NZ' => 'en', //英语(新西兰)
            'en-JM' => 'en', //英语(牙买加)
            'en-IN' => 'en', //英语(印度)
            'en-GB' => 'en', //英语(英国)
            'yo' => 'yo', //约鲁巴语
            'yo-NG' => 'yo', //约鲁巴语(尼日利亚)
            'vi' => 'vi', //越南语
            'vi-VN' => 'vi', //越南语(越南)
            'zh' => 'zh', //中文
            'zh-Hant' => 'zh-Hant', //中文(繁体)
            'zh-MO' => 'zh-Hant', //中文(繁体，澳门特别行政区)
            'zh-TW' => 'zh-Hant-tw', //中文(繁体，台湾)
            'zh-HK' => 'zh-Hant-hk', //中文(繁体，香港特别行政区)
            'zh-CN' => 'zh', //中文(简体)
            'zh-SG' => 'zh', //中文(简体，新加坡)
            'zu' => 'zu', //祖鲁语
            'zu-ZA' => 'zu', //祖鲁语(南非)
        ];
        return $codeList;
    }

    /**
     * @notes 设置翻译目标语言
     * @param $targetLanguage
     * @return $this
     */
    public function setTargetLanguage(string $targetLanguage)
    {
        $this->targetLanguage = $targetLanguage;
        return $this;
    }


    /**
     * @notes 错误信息
     * @return string|null
     */
    public function getError()
    {
        return $this->error;
    }


    /**
     * @notes 获取翻译结果
     * @return array|false
     */
    public function getTranslateText()
    {
        // TODO:不支持语言不翻译 无需浪费请求资源
        $HSLangCodeList = $this->getHSLangCode();
        if (!isset($HSLangCodeList[$this->targetLanguage])) return '';

        $result = $this->instance->translateText(
            $this->sourceLanguage ?: "",
            $HSLangCodeList[$this->targetLanguage], // 转换目标语言代码
            $this->sourceTextList
        );
        if (false === $result) {
            $this->error = $this->instance->getError();
            return false;
        }
        return $result[0]['Translation'] ?? "";
    }

}